import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes'
import store from '@/store'

// 注册
Vue.use(VueRouter)

// 备份
let originPush = VueRouter.prototype.push
// 重写push
VueRouter.prototype.push = function (location, resolve, reject) {
  if (resolve && reject) {
    originPush.call(this, location, resolve, reject)
  } else {
    originPush.call(this, location, () => { }, () => { })
  }
}

// 暴露VueRouter类的实例
const router = new VueRouter({
  routes,
  scrollBehavior() {
    // return 期望滚动到哪个的位置    
    return { y: 0 }// 始终滚动到顶部
  }

})

export default router

//全局前置守卫
router.beforeEach(async (to, from, next) => {
  // to:往哪去  from:从哪来  next:放行函数
  // next()放行  next(path)放行到指定路由
  next()
  //用户是否登录:判断仓库内是否有token
  //每一次路由跳转之前需要用有用户信息在跳转,没有发请求获取用户信息在跳转
  //token
  let token = store.state.user.token
  // console.log(token);
  //用户信息
  let name = store.state.user.userInfo.name
  // 已登录
  if (token) {  
    if (to.path == '/login'|| to.path == '/register') { // 禁止去登录和注册
      next('/')
    }else {
      // 去其他页面
      if (name) {// 有用户信息
        next() 
      } else {// 没有用户信息,派发action
        try {
          // 获取仓库用户信息成功
          await store.dispatch('getUserInfo')
          next()
        } catch (error) { // token失效
          // 清除token
          await store.dispatch('userLogout')
          next('/login')
        }
      }
    }
  }else{
    // 未登录 游客身份 禁止访问权限页面：交易相关、支付相关、个人中心
    let toPath = to.path
    if(toPath.indexOf('/trade')!=-1 || toPath.indexOf('/pay')!=-1 || toPath.indexOf('/center')!=-1){
      next('login?redirect='+toPath)
    }else{
      next() // 放行
    }
  }
})
  
